﻿using System.Security.Cryptography;

namespace che10
{
    internal class Text7
    {
        static void Main(string[] args)
        {
            Console.WriteLine("算数运算符");
            //算术运算符是用于数值类型变量计算的运算符
            //它的返回结果是数值

//1.赋值符号(=)
            //关键知识点：
            //先看右侧再看左侧，把右侧的值赋值给在左侧的变量
            //eg：
            string myName = "Charlie";//就是把charlie赋值给myName，下面一样
            float myHeight = 163.0f;

//2.算术运算符
            //1.加号 +
            //用自己计算 ，先算右侧结果，再赋值给左侧变量
            int a1 = 3;
            a1 = a1 + 2;//结果是5
            Console.WriteLine(a1);
            //连续运算，先算右侧结果，再赋值给左侧变量
             a1= a1 + 23 + a1 + 1 + 3;
            Console.WriteLine(a1);
            a1 = 1 + 2 + 3 + 4;
            Console.WriteLine(a1);
            //初始化时就运算，先算右侧结果，再赋值给左侧变量
            int a2 = 3 + 4 + 5 + 6+a1;
            Console.WriteLine(a2);
            //2.减号 -
            //用自己计算，先算右侧结果，再赋值给左侧变量
            int b1 = 1;
            b1 = 1 - b1;
            Console.WriteLine(b1);
            //连续运算，先算右侧结果，在赋值给左侧变量
            b1 = 1 - 2 - 5 - b1;
            Console.WriteLine(b1);
            b1 = 9 - b1;
            Console.WriteLine(b1);
            //初始化时就运算，先算右侧结果，在赋值给左侧变量
            int b2 = 1 - 2 - 2 - 4 - 7 - 5;
            Console.WriteLine(b2);

            //3.乘号 *
            //用自己计算，先算右侧结果，在赋值给左侧变量
            int c1 = 1;
            c1 = 3 * c1;
            Console.WriteLine(c1);
            //连续运算，先算右侧结果，再赋值给左侧变量
            c1 = 5 * c1*c1*2;
            Console.WriteLine(c1);
            //初始化时就运算，先算右侧结果，再复制给左侧变量
            int c2 = 1 * 4 * c1 * 4 * 1 * 0;
            Console.WriteLine(c2);

            //4.除号  /
            //用自己计算，先算右侧结果，在赋值给左侧变量
            int d1 = 2;
            d1 = 2 / d1;
            Console.WriteLine(d1);
            //连续运算，先算右侧结果，再赋值给左侧变量
            float d2 =3f/4/8f;//有小数点的话用float，不然直接取整数（记得加f，最好第一个就加不然等于0后继续与后面的数相乘结果还是零）
            Console.WriteLine(d2);
            //初始化时就运算，先算右侧结果，再赋值给左侧变量
            float d3 = 2f / 3 / 5 / 6 / 2;
            Console.WriteLine(d3);

            //5.取余 %
            //用自己计算，先算右侧结果，再赋值给左侧变量
            int e1 = 2;
            e1 = 3 % e1;//   3/2结果1余1，所以值为1
            Console.WriteLine(e1);
            //连续运算，先算右侧结果，再赋值给左侧变量
            e1 = 4 % 3 % 2;
            Console.WriteLine(e1);
            //初始化时就运算，，先算右侧结果，在赋值给左侧变量
            //略

 //3.算术运算符的  优先级
            //优先级 是指 在混合运算时的运算顺序
            //乘除取余，优先级高于 加减 ；先算乘除取余 后算加减
            float f1 = 1 + 4 + 3 - 4f / 4 * 2 % 5;
            Console.WriteLine(f1);
            //括号改变优先级 优先计算括号内容
            f1 = 1 + (1 + 3 * 4) / 3f % f1;
            Console.WriteLine(f1);
            //多组括号，先算最里层的括号，依次往外算
            f1 = 1 + ((5 + 2) / 4 + 1) * 4;
            Console.WriteLine(f1);

 //4.算术运算符的 复合运算符
            //固定写法 运算符 =
            //+=，-=，*=，/=，%=
            //复合运算符 是用于 自己=自己进行运算的
            int g1 = 1;
            g1 = g1 + 1;
            Console.WriteLine(g1);

            g1 = 1;
            g1 += 1;//g1=g1+1（等号前面的加减乘除指的是加减乘除它自己）
            Console.WriteLine(g1);

            g1 = 1;
            g1 += 1;
            g1 -= 1;
            g1 *= 1;
            g1 /= 1;
            g1 %= 1;
            Console.WriteLine(g1);

            int g2 = 3;
            g2 *= 3 + 2 * 3 / 2;//g2=g2*(3+2*3/2)=18
            Console.WriteLine(g2);
            //注意：复合运算符 只能进行一种运算，不能混合运算
            //g2+-*/=2（错的！！！！！！）

//5.算术运算符的 自增减
            //自增运算符   让自己+1 
            int h1 = 1;
            h1++;//先用再加
            Console.WriteLine(h1);
            ++h1;//先加再用 
            Console.WriteLine(h1);

            h1 = 1;
            Console.WriteLine(h1++);//结果是1，先用（打印出来）再加（在+1）
            Console.WriteLine(++h1);//3，先+1，再打印

            //自减运算符（基本同上）
            int h2 = 3;
            h2--;
            Console.WriteLine(h2);
            --h2;
            Console.WriteLine(h2);

            h2 = 5;
            Console.WriteLine(--h2);//4
            Console.WriteLine(h2--);//4


            //作业
            //1.定义一个变量存储你的年龄，十年后你的年龄是多少？请输出到控制台
            int myAge = 19;
            myAge = 10 + myAge;
            Console.WriteLine("十年后你的年龄是："+myAge);

            //2.计算一个半径为5的圆的面积和周长
            //面积公式：πr²
            //周长公式：2πr
            int bj = 5;
            float mj = 3.14f * 5 * 5;
            float zc = 2 * 3.14f * 5;
            Console.WriteLine("面积是："+mj);
            Console.WriteLine("周长是："+zc);

            //3.计算任意三门成绩的总分、平均分打印到控制台。
            //三门成绩均为整数类型
            int math = 99, chinese = 86, english = 66;
            int all = math + chinese + english;
            float average = (math + chinese + english) / 3;
            Console.WriteLine("总分："+all);
            Console.WriteLine("平均分："+average);

            //4.商店T恤的价格为285元/件，裤子的价格为720元/条，小李在该店卖了2件T恤
            //和3条裤子，请计算小李该付多少钱？打3.8折后呢？
            int t = 285, k = 720;
            int all2 = t * 2 + k * 3;
            Console.WriteLine(all2);
            Console.WriteLine("总价为："+all2);
            float zhe = all2 / 3.8f;
            Console.WriteLine("打折后价格为："+zhe);

            //5.
            int a = 10, b = 20;
            int number1 = ++a + b;//31
            Console.WriteLine(number1);
            a = 10;
            b = 20;
            int number2 = a + b++;//30
            Console.WriteLine(number2);
            a = 10;
            b = 20;
            int number3 = a++ + ++b + a++;//42
            Console.WriteLine(number3);
            //请说明number1和number2和number3的结果

            //6.有两个数a=99，b=87，请写出两种方法交换他们的值，让a = 87，b=99
            //第一种方法：中间商 不赚差价
            a = 87;
            b = 99;
            int num = a;
            a = b;
            b = num;
            Console.WriteLine(a);
            Console.WriteLine(b);
            //说明：就是将a变量存储到另一个变量里，然后a和b再互换，b再等于a，就可以完成互换啦
            //第二种方法：用算数运算符算
            a = 87;
            b = 99;
            a = a + b;
            b = a - b;
            a = a - b;
            Console.WriteLine(a);
            Console.WriteLine(b);

            //7.请把987652秒通过代码转为n天n小时n分钟n秒显示在控制台中
            int m = 987652;
            int second = m % 60;
            int minute = m / 60;
            int hour = minute / 60;
            int minute1 = minute % 60;
            int day = hour / 24;
            int hour1 = hour % 24;
            Console.WriteLine(day+"天"+hour1+"小时"+minute1+"分钟"+second+"秒");
        }
    }
}
